YOUR FIRST METEOR APPLICATION翻译(十一)——方法(Methods)

Methods
聪明人应该就会想到,虽然我们上一章实现了有限制地读取数据库的资料,但是这并不是安全的方法。因此,在Meteor.js里面还提供了一套相对安全的“方法(Methods)”来操作服务器和数据库。

在我们继续之前大家可以在javascript控制台运行以下代码:

PlayersList.insert({name: "Fake Player", score: 1000});

看出猫腻没有?虽然用户现在已经是不能随意读取数据库里面的数据了,但是还是可以随意地往数据库里面写数据,这样是不是很安全呢?下面就让我们来通过Methods来实现安全的数据操作。

首先,我们要先在项目的目录下,终端执行以下代码:

meteor remove insecure

因为,Meteor.js默认是安装了insecure包得,所以,默认用户也是可以随意操作数据库的数据的,当我们卸载了以后,用户就不能随意地操作数据库了。

那我们在程序开发的时候需要操作的时候应该怎么实现呢?下面我们就来说说方法

创建方法(Methods)
要创建方法,我们首先要在服务器端的代码里面加入类似以下结构的代码:

1
2
3
Meteor.methods({
// methods go here
});

对于Methods来说,不单单可以操作数据库,也可以操作服务端,通过以下代码,我们就可以通过客户端来使服务器端输出log:

1
2
3
4
5
Meteor.methods({ 
'sendLogMessage': function(){
console.log("Hello world");
}
});

当然,看到以上代码我们都会有疑问了,如何在客户端触发这些方法呢?在Meteor.js里面提供了Meteor.call()这个接口给我们,下面我们来看看代码是如何实现的。

1
2
3
4
5
6
7
8
9
10
11
'submit form': function(event){ 
event.preventDefault();
var playerNameVar = event.playerName.value;
var currentUserId = Meteor.userId();
PlayersList.insert({
name: playerNameVar,
score: 0,
createdBy: currentUserId
});
Meteor.call('sendLogMessage');
}

通过以上的客户端代码我们就可以实现在客户端上触发服务器端的行为。

来到这里,可能又会有好学的小伙伴就问了,我这如果是打算往服务器里面传输数据、参数什么的,那该这么办呢?别急,等哥来给你娓娓道来。

传参
其实要传参,方法也很简单,下面就是我们客户端里面的触发代码:

1
2
3
4
5
'submit form': function(event){ 
event.preventDefault();
var playerNameVar = event.target.playerName.value;
Meteor.call('insertPlayerData', playerNameVar);
}

服务器端的代码:

1
2
3
4
5
6
7
8
9
Meteor.methods({
'insertPlayerData': function(playerNameVar){
var currentUserId = Meteor.userId(); PlayersList.insert({
name: "David",
score: 0,
createdBy: currentUserId
});
}
});

来到这里,我们这章基本的要点就讲完了,如果是打算进行其他数据操作,只需要参考以上的代码就可以实现了。

感谢meteortips & David以上内容根据英文版的YOUR FIRST METEOR APPLICATION粗略翻译而来,在未经我本人允许的情况下请勿转载,违者本人保留法律追究的权利。